<?php
/** 
 *  @author VGireev
 *	@REVISION:  $Id: M_SQL.php 11 2011-12-18 12:52:37Z host.xserver@gmail.com $ 
 *  @brief Файл M_SQL
 *  © myCompany 2011
 *
 *  Помощник работы с БД
 *  
 */

class M_SQL
{
    private static $instance; 	//!< Ссылка на экземпляр класса
    
	// Получение единственного экземпляра (одиночка)
	public static function Instance()
	{
		if (self::$instance == null)
			self::$instance = new M_SQL();
		
		return self::$instance;
	}
/* ===================================================================== */	
	/** 
	*	@brief				- Выборка строк
	*	@param $query    	- Полный текст SQL запроса
	*	@brief результат	- Массив выбранных объектов
	*/
	public function Select($query)
	{
		$result = mysql_query($query);
		
		if (!$result)
			die(mysql_error());
		
		$n		= mysql_num_rows($result);
		$arr	= array();
	
		for($i = 0; $i < $n; $i++)
		{
			$row	= mysql_fetch_assoc($result);		
			$arr[]	= $row;
		}

		return $arr;				
	}
	
	/**
	*	@brief				- Вставка строки
	* 	@param $table 		- Имя таблицы
	* 	@param $object 		- Ассоциативный массив с парами вида "имя столбца - значение"
	* 	@brief результат	- Идентификатор новой строки
	*/
	public function Insert($table, $object)
	{			
		$columns	= array();
		$values		= array();
	
		foreach ($object as $key => $value)
		{
			$key = mysql_real_escape_string($key . '');
			$columns[] = $key;
			
			if ($value === null)
			{
				$values[]	= 'NULL';
			}
			else
			{
				$value		= mysql_real_escape_string($value . '');							
				$values[]	= "'$value'";
			}
		}
		
		$columns_s	= implode(',', $columns);
		$values_s	= implode(',', $values);
			
		$query		= "INSERT INTO
					   $table ($columns_s)
				       VALUES ($values_s)";

        $result		= mysql_query($query);
								
		if (!$result)
			die(mysql_error());
			
		return mysql_insert_id();
	}
		
	/** 
	*	@brief 				- Изменение строк
	*	@param $table 		- Имя таблицы
	*	@param $object 		- Ассоциативный массив с парами вида "имя столбца - значение"
	*	@param $where		- Условие (часть SQL запроса)
	*	@brief результат	- Число измененных строк
	*/
	public function Update($table, $object, $where)
	{
		$sets = array();
	
		foreach ($object as $key => $value)
		{
			$key = mysql_real_escape_string($key . '');
			
			if ($value === null)
			{
				$sets[] = "$key=NULL";			
			}
			else
			{
				$value	= mysql_real_escape_string($value . '');					
				$sets[]	= "$key='$value'";			
			}			
		}
		
		$sets_s = implode(',', $sets);			
		$query	= "UPDATE $table
				   SET $sets_s 
				   WHERE $where";
		$result	= mysql_query($query);
		
		if (!$result)
			die(mysql_error());

		return mysql_affected_rows();	
	}
	/**
	* 	@brief 				- Удаление строк
	* 	@param $table 		- Имя таблицы
	* 	@param $where		- Условие (часть SQL запроса)	
	* 	@brief результат	- Число удаленных строк
	*/
	public function Delete($table, $where)
	{
		$query	= "DELETE
				  FROM $table 
				  WHERE $where";		
		$result	= mysql_query($query);
						
		if (!$result)
			die(mysql_error());

		return mysql_affected_rows();	
	}

}
